#ifndef GAMEENGINE_GRAPHICS_CAMERA_EXAMINE_CAMERA_MANIPULATOR_H
#define GAMEENGINE_GRAPHICS_CAMERA_EXAMINE_CAMERA_MANIPULATOR_H

#include <GameEngine/Graphics/graphics_settings.h>

#include <GameEngine/Graphics/Camera/camera_manipulator.h>


#ifdef GAMEENGINE_NAMESPACES
namespace GameEngine {
#endif


//! An implementation of a camera manipulator meant for object examination
/*!
 *  The CameraManipulatorExamine allows to zoom, pan and rotate around an object
 *  in order to examine it. It is typically meant for an object editor (although
 *  it is not limited to this purpose).
 *
 *  One of the advantages of the CameraManipulatorExamine manipulator is that it
 *  allows to see the scene from any view point. Its biggest drawback is related,
 *  though: there is too much freedom in the selection of the view point, which
 *  can make it difficult to get a satisfying one.
 */
class _Graphics_decl CameraManipulatorExamine : public CameraManipulator {
	Q_OBJECT

public:
	CameraManipulatorExamine();
	CameraManipulatorExamine(const CameraManipulatorExamine& rhs);
	CameraManipulatorExamine& operator=(const CameraManipulatorExamine& rhs);
	virtual ~CameraManipulatorExamine();

	virtual bool manipulate(MouseButton button, const Vector2d<int>& mouse_move);
};

//========================================================

#ifdef GAMEENGINE_NAMESPACES
} // namespace GameEngine
#endif

#endif
